package com.youdoneed.user.user;

import com.youdoneed.base.application.ResultMessage;
import com.youdoneed.base.pagination.Page;
import com.youdoneed.base.pagination.Paging;
import com.youdoneed.user.model.User;
import com.youdoneed.user.vo.*;

import java.util.List;

/**
 * @author Ewing
 * @since 2017-04-21
 **/
public interface UserService {

    User getUser(String userId);

    List<User> getUsers(String[] userIds);

    User getUserByPhoneNo(String phoneNo);

    List<User> getUserByPhoneNos(String[] phoneNos);

    /**
     * 手机号登陆或注册。
     */
    ResultMessage<User> phoneNoLoginOrRegister(String phoneNo, String nation,String imgUrl);

    /**
     * 用户修改自己的基本信息。
     */
    long setUserBasicInfo(UserBasicInfo userParam);

    /**
     * 查找其他用户
     */
    List<UserShow> findOthers(String userId, Paging paging, String name);

    /**
     * 根据条件查询用户。
     */
    Page<User> findUsers(Paging paging, String name, String phoneNo);

    /**
     * 附近的用户。
     */
    List<UserShow> nearbyUsers(Paging paging, String userId, NearbyUserParam nearby);

    UserShow getUserShow(String userId);

    /**
     * 查询给定的ID范围内的用户。
     */
    List<UserBasicInfo> findInUserIds(String[] userIds, String name);

    /**
     * 改变用户的统计信息。
     */
    long changeStatistics(String userId, Integer totalArticleChange, Integer totalFriendChange);

    /**
     * 短信邀请好友注册。
     */
    void inviteUser(String myUserId, String otherPhoneNo);

    /**
     * 判断用户的通讯录的号码今天是否已邀请。
     */
    List<String> hasInvitedToday(String myUserId, String[] otherPhoneNos);

    /**
     * 管理员查找用户。
     */
    Page<User> adminFindUsers(Paging paging, FindUserParam findUserParam);

    /**
     * 管理员添加用户。
     */
    User adminAddUser(User user);

    /**
     * 管理员统计用户信息。
     */
    UserStatistics userStatistics();

    /**
     * 获取用户通讯录中已注册的用户。
     */
    List<ContactUser> getContactUsers(String userId);
}
